package beans;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import utils.CCOrdenDeCompra;
import utils.CCRemito;
import utils.remito;
import vo.CCSolicitudCotizacionOperadorVO;
import vo.CCSolicitudCotizacionParentVO;
import ws.SolicitudCotizacionResponse;

import entidades.Cliente;
import entidades.Factura;
import entidades.Pago;
import entidades.Remito;
import entidades.ResumenCuenta;
import entidades.ordenCompra;
import entidades.ordenCompraItem;
import beans.Facade;


public @Stateless class FacadeBean implements Facade {
	
	@EJB
	private AdministradorClientes adminClientes;
	@EJB
	private AdministradorCompras adminCompras;
	@EJB
	private AdministradorCotizaciones adminCotizaciones;
	@EJB
	private AdministradorFacturas adminFacturas;
	@EJB
	private RecibirPagoCLI ReceptorPago;
	
	
	/*
	 * Clientes
	 */
	
	public void crearCliente(Cliente c) {
		adminClientes.crearCliente(c);
	}
	
	public void modificarCliente(Cliente c){
		adminClientes.modificarCliente(c);
	}
	
	public void eliminarCliente(Cliente c){
		adminClientes .eliminarCliente(c);
	}
	
	public ArrayList <Cliente> getListaClientes(){
		return adminClientes.getListaClientes();
	}
	
	public Cliente getClienteConCotizaciones(Cliente c){
		return (adminClientes.getClienteConCotizaciones(c));
	}
	
	public ResumenCuenta getResumenCuenta(Cliente c){
		ResumenCuenta rc = new ResumenCuenta();
		Cliente mC = adminClientes.getCliente(c.getId());
		System.out.println("cuenta: "+mC.getCuentaCorriente().getNrocuenta()+"el saldo de la cuenta es de: "+mC.getCuentaCorriente().getSaldoactual());
		
		if (mC != null)
		{
			// Recupera el cliente y lo vincula
			rc.setCliente(mC);
			// Recupera las facturas, pagos y pendientes
			rc.setPagosRealizados(this.getPagosCLiente(c));
			rc.setOperacionesFacturadas(this.getFacturasCliente(c));
			rc.setOperacionesPendientes(this.getOperacionesPendientes(c));	
		}
		
		return rc;
	}
	
	public Cliente getCliente(int pId)
	{
		return  adminClientes.getCliente(pId);		
	}
	/*
	 * Cotizaciones
	 */
	
	
	public CCSolicitudCotizacionOperadorVO cotizarRodamientos(CCSolicitudCotizacionOperadorVO cotizacion){
		return (adminCotizaciones.cotizarRodamientos(cotizacion));
	}
	
	public boolean aceptarCotizacion(CCSolicitudCotizacionParentVO cotizacionCPR){
		return adminCotizaciones.aceptarCotizacion();
	}
	
	public void enviarCotizacionAlCliente(List <SolicitudCotizacionResponse> cotizacionAceptada){
		adminCotizaciones.enviarCotizacionAlCliente(cotizacionAceptada);
	}
	
	
	/*
	 * Compras
	 */
	
	public void enviarOrdenDeCompra(CCOrdenDeCompra oc,Cliente c){
		adminCompras.enviarOrdenDeCompra(oc,c);
	}
	
	public void procesarRemito(CCRemito remito){
		adminCompras.procesarRemito(remito);
	}
	
	public ordenCompra obtenerOrdenCompra(ordenCompra c){
		return(adminCompras.obtenerOrdenCompra(c));
	}
	
	
	/*
	 * Facturas
	 */
	
	
	public ArrayList<Factura> getFacturasCliente(Cliente c){
		return(adminFacturas.getFacturasCliente(c));
	}
	
	public ArrayList<Pago>getPagosCLiente(Cliente c){
		return (adminFacturas.getPagosCLiente(c));
	}
	
	public ArrayList<ordenCompraItem>getOperacionesPendientes(Cliente c){
		return (adminFacturas.getOperacionesPendientes(c));
	}
	
	public void generarFactura(Remito r){
		adminFacturas.generarFactura(r);
	}
	
	// Implementar Caso de Uso Facturar Rodamientos

	
	public void persistirFactura(Factura f){
		return;
	}

	public void enviarFactura(Factura f){
		return;
	}
	
	public float recibirPago(int idCliente, float monto){
		return ReceptorPago.recibirPago(idCliente, monto);
	}
	
}
